エンジニアの知的生産術 プログラミングはどうやって学ぶか
プログラミングを学ぶとはどういうことかの言語化が、自分の感覚とも合う
意識せずにやっていることの(確からしい)説明(言語化)を見つけた!という気持ち
私はプログラミングの学びのプロセスは「情報収集・モデル化・検証」の3要素の繰り返しだと考えています。(強調は引用者による)
情報収集
ほかの人が書いたプログラムを読む
読むだけではなく、まねて入力するテクニック「写経」もよく使われています。
例:print("Hello, world!")で「Hello, world!」と表示できる
抽象化
抽象化は、複数の具体的情報から共通するパターンを見いだすことや、どこが重要でどこが枝葉かを判断することと、強い関連を持っています。
複数のものを見比べ、共通点を見いだすことが、抽象化の助けになります。
例:print("きっとここに書いたものが表示される")とパターンを見出す
検証
例:「PythonでBye, world!と出力したい場合には、print("Bye, world!")と書けばよいのではないか?」と思い付く
思い付きはあくまで仮説
本当にその方法で「Bye, world!と出力する」という目的が達成できるかは、実際に試してみなければわかりません。
試すと、この具体例に関して、目的が達成できることがわかる
例:複数行に分けて「Hello,(改行)world!」と出力したい場合
このコードは構文エラーになり、期待どおりに動かないことがわかります。
失敗ではない!(冒頭の自ツイート)
「どうして思ったように動かないのか?」──こう考えることで、あなたは理解を深めていくことができます。
この例では「改行をprintしたいとき、単に改行したのではうまくいかない」という事実を発見しました。次は、この課題の解決方法を探します。
情報収集・モデル化・検証を繰り返す
単に改行したのではうまくいかないので、Google検索する
役に立ちそうな情報を含んだサンプルコードが見つかる
この新しいサンプルコードを、今までにあなたが集めた情報と比較すれば、あなたはパターンを見いだし、「なるほど、じゃあこう実装すれば目的が達成できるはずだ」という新しい仮説を生み出すことができるでしょう。
情報収集し、パターンを見出し、「こうすればいいのでは」という仮説を検証する
これを(気の遠くなるほどの回数)繰り返すことでプログラミングができるようになる
情報収集・モデル化・検証は、よい質問の仕方にも通じるかも